﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace QuizzAdminData
{
    /// <summary>
    /// Verzameling van DB methods
    /// </summary>
    /// <returns></returns>
    /// <author>Kenny Vaneetvelde</author>
    public static class AntwoordenDB
    {
        /// <summary>
        /// Haal alle records uit de tabel
        /// </summary>
        /// <returns>Lijst van antwoord objecten</returns>
        /// <author>Kenny Vaneetvelde</author>
        public static List<Antwoord> GetAntwoorden()
        {
            List<Antwoord> antwoorden = new List<Antwoord>();

            SqlConnection conn = QuizAdminDB.GetConnection();

            string selectStatement = "SELECT * FROM Antwoorden";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();
                SqlDataReader reader = selectCmd.ExecuteReader();
                while (reader.Read())
                {
                    Antwoord antwoord = new Antwoord();

                    antwoord.Id = (int)reader["id"];
                    antwoord.AntwoordTekst = reader["antwoord"].ToString();
                    antwoord.Juist = (bool)reader["juist"];

                    antwoorden.Add(antwoord);
                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return antwoorden;
        }

        /// <returns>Lijst van antwoorden van een specifieke vraag.</returns>
        /// <author>Kenny Vaneetvelde</author>
        public static List<Antwoord> GetAntwoordByVraagID(int vraagID)
        {
            List<Antwoord> antwoorden = new List<Antwoord>();

            SqlConnection conn = QuizAdminDB.GetConnection();

            string selectStatement =
                "SELECT Antwoorden.* " +
                "FROM Antwoorden " +
                "JOIN Vragen_Antwoorden " +
                "ON Antwoorden.id = Vragen_Antwoorden.antwoord_id " +
                "JOIN Vragen " +
                "ON Vragen_Antwoorden.vraag_id = Vragen.id " +
                "WHERE Vragen.id = @vraagID ";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();
                selectCmd.Parameters.AddWithValue("vraagID", vraagID);
                SqlDataReader reader = selectCmd.ExecuteReader();
                Antwoord antwoord;
                while (reader.Read())
                {
                    antwoord = new Antwoord();

                    antwoord.Id = (int)reader["id"];
                    antwoord.AntwoordTekst = reader["antwoord"].ToString();
                    antwoord.Juist = (bool)reader["juist"];

                    antwoorden.Add(antwoord);
                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return antwoorden;
        }

        /// <summary>
        /// Haal antwoord op volgens ID.
        /// </summary>
        /// <returns>Antwoord</returns>
        /// <author>Kenny Vaneetvelde</author>
        public static Antwoord GetAntwoordByID(int id)
        {
            Antwoord antwoord = new Antwoord();

            SqlConnection conn = QuizAdminDB.GetConnection();

            string selectStatement = "SELECT * FROM Antwoorden WHERE id=@id";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();

                selectCmd.Parameters.AddWithValue("id", id);
                SqlDataReader reader = selectCmd.ExecuteReader();

                if (reader.Read())
                {
                    antwoord.Id = (int)reader["id"];
                    antwoord.AntwoordTekst = reader["antwoord"].ToString();
                    antwoord.Juist = (bool)reader["juist"];

                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return antwoord;
        }

        /// <summary>
        /// Zet nieuw antwoord in de DB
        /// </summary>
        /// <author>Kenny Vaneetvelde</author>
        public static void InsertAntwoord(int vraagID, string antwoordText, bool juistAntwoord)
        {
            SqlConnection conn = QuizAdminDB.GetConnection();

            string sqlIns = "INSERT INTO Antwoorden(antwoord, juist) VALUES (@antwoord, @juist)";

            try
            {
                conn.Open();

                SqlCommand cmdIns = new SqlCommand(sqlIns, conn);
                cmdIns.Parameters.AddWithValue("@antwoord", antwoordText);
                cmdIns.Parameters.AddWithValue("@juist", juistAntwoord);
                cmdIns.ExecuteNonQuery();
                cmdIns.Dispose();
                cmdIns = null;

                sqlIns = "INSERT INTO Vragen_Antwoorden (vraag_id, antwoord_id) VALUES (@vraag_id, " + GetLastRowID() + ")";
                cmdIns = new SqlCommand(sqlIns, conn);
                cmdIns.Parameters.AddWithValue("@vraag_id", vraagID);
                cmdIns.ExecuteNonQuery();
                cmdIns.Dispose();
                cmdIns = null;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

        /// <summary>
        /// Update een antwoord.
        /// </summary>
        /// <author>Kenny Vaneetvelde</author>
        public static void UpdateAntwoord(int id, string antwoord, bool juist)
        {
            SqlConnection conn = QuizAdminDB.GetConnection();

            string sql = "UPDATE Antwoorden SET antwoord=@antwoord, juist=@juist WHERE id=@id";

            try
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("id", id);
                cmd.Parameters.AddWithValue("antwoord", antwoord);
                cmd.Parameters.AddWithValue("juist", juist);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                cmd = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

        }

        /// <summary>
        /// Verwijder een antwoord
        /// </summary>
        /// <author>Kenny Vaneetvelde</author>
        public static void DeleteAntwoord(int antwoordID)
        {
            SqlConnection conn = QuizAdminDB.GetConnection();

            string sql =
                "DELETE FROM Antwoorden " +
                "WHERE id = @id";

            try
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@id", antwoordID);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                cmd = null;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

        /// <returns>ID van de laatste rij</returns>
        /// <author>Kenny Vaneetvelde</author>
        public static int GetLastRowID()
        {
            int antwoordID = -1;

            SqlConnection conn = QuizAdminDB.GetConnection();

            string selectStatement = "SELECT id FROM Antwoorden WHERE id=(SELECT MAX(id) FROM Antwoorden)";

            SqlCommand selectCmd = new SqlCommand(selectStatement, conn);

            try
            {
                conn.Open();

                SqlDataReader reader = selectCmd.ExecuteReader();

                if (reader.Read())
                {
                    antwoordID = (int)reader["id"];

                }

                reader.Close();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return antwoordID;
        }

    }
}
